/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.eventos.bc;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
//import org.cip.esymons.eventos.be.InstructorEvento;
import org.cip.esymons.eventos.be.InstructorModulo;
//import org.cip.esymons.eventos.be.ModuloCurso;
import org.cip.esymons.general.be.PersonaNatural;

/**
 *
 * @author lizardo
 */
@Stateless
public class InstructorModuloFacade implements InstructorModuloFacadeLocal {
    @PersistenceContext
    private EntityManager em;

    public void create(InstructorModulo instructorModulo) {
        em.persist(instructorModulo);
    }

    public void edit(InstructorModulo instructorModulo) {
        em.merge(instructorModulo);
    }

    public void remove(InstructorModulo instructorModulo) {
        try {
            em.remove(em.merge(instructorModulo));
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

    public InstructorModulo find(Object id) {
        return em.find(InstructorModulo.class, id);
    }

    public List<InstructorModulo> findAll() {
        return em.createQuery("select object(o) from InstructorModulo as o").getResultList();
    }

    public List<InstructorModuloAdapter> listarInstructorModulo(Integer modCodigo) {
        String sql = "SELECT NEW org.cip.esymons.eventos.bc.InstructorModuloAdapter(";
               sql+= "im.inmCodigo, p.perapellidoPaterno, p.perapellidoMaterno, p.perNombres) ";
               sql+= "FROM InstructorModulo im ";
               sql+= "JOIN im.ineCodigo ie ";
               sql+= "JOIN ie.perCodigo p ";
               sql+= "WHERE im.modCodigo.modCodigo IN (";
               sql+= "SELECT m.modCodigo ";
               sql+= "FROM ModuloCurso m ";
               sql+= "WHERE m.modCodigo = ?1)";
        return em.createQuery(sql).setParameter(1, modCodigo).getResultList();
    }

    public InstructorModulo buscarXCodigo(Integer inmCodigo) {
        String sql = "SELECT m FROM InstructorModulo AS m WHERE m.inmCodigo=?1";
        return (InstructorModulo)em.createQuery(sql).setParameter(1, inmCodigo).getSingleResult();
    }

    public List<PersonaNatural> mostrarInstructor(Integer modCodigo) {
        String sql = "SELECT p FROM InstructorModulo im ";
               sql+= "JOIN im.ineCodigo ie ";
               sql+= "JOIN ie.perCodigo p ";
               sql+= "WHERE im.modCodigo.modCodigo = ?1";
        try {
            return em.createQuery(sql).setParameter(1, modCodigo).getResultList();
//            return (PersonaNatural)em.createQuery(sql).setParameter(1, modCodigo).getSingleResult();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    public List<InstructorModulo> listarInstructorModulo(Integer preCodigo, Integer modCodigo) {
        List<InstructorModulo> lista = new ArrayList<InstructorModulo>();
        try {
            Vector v = new Vector();
            if (modCodigo != null) {
                v = (Vector) em.createNativeQuery("call sp_registrar_instructor_modulo (?,?);")
                    .setParameter(1, preCodigo)
                    .setParameter(2, modCodigo)
                    .getSingleResult();
                System.out.println(" elemento 0 " + v.get(0).toString());
                lista = mostrarInstructorModulo(modCodigo);
            }
        } catch (Exception e) {
            System.out.println("ERROR: " + e.getMessage());
            lista = null;
        }
        return lista;
    }

    public List<InstructorModulo> mostrarInstructorModulo(Integer modCodigo) {
        //em.flush();
        return em.createQuery("select im from InstructorModulo im where im.modCodigo.modCodigo = ?1 order by im.ineCodigo.ineCodigo")
                .setParameter(1, modCodigo)
                .getResultList();
    }

    public List<InstructorModulo> priorizarFirmas(Integer preCodigo, Integer ineCodigo, Integer modCodigo) {
        List<InstructorModulo> lista = new ArrayList<InstructorModulo>();
        try {
            Vector v = new Vector();
            v = (Vector) em.createNativeQuery("call sp_priorizar_firma_instructor (?,?);")
                    .setParameter(1, preCodigo)
                    .setParameter(2, ineCodigo)
                    .getSingleResult();
            System.out.println(" elemento 0 " + v.get(0).toString());
            lista = mostrarInstructorModulo(modCodigo);
        } catch (Exception e) {
            System.out.println("ERROR: " + e.getMessage());
            lista = null;
        }
        return lista;
    }

}
